package dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.ItemSolicitudCotizacionTO;
import dto.SolicitudCotizacionTO;

@Entity
@Table(name = "SolicitudCotizacion")
public class SolicitudCotizacion extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@Column(name = "fecha", nullable = false, columnDefinition = "datetime")
	private Date fecha;

	@OneToOne
	@JoinColumn(name = "idCliente")
	private Cliente cliente;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idSolicitud")
	private List<ItemSolicitudCotizacion> items;

	public SolicitudCotizacion() {
		items = new ArrayList<ItemSolicitudCotizacion>();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<ItemSolicitudCotizacion> getItems() {
		return items;
	}

	public void agregarItem(ItemSolicitudCotizacion item) {
		items.add(item);
	}

	public SolicitudCotizacionTO getDTO() {
		SolicitudCotizacionTO dto = new SolicitudCotizacionTO();
		dto.setId(id);
		dto.setFecha(fecha);
		if (cliente != null)
			dto.setCliente(cliente.getDTO());
		for (ItemSolicitudCotizacion i : items)
			dto.agregarItem(i.getDTO());
		return dto;
	}

	public static SolicitudCotizacion fromDTO(SolicitudCotizacionTO dto) {
		if (dto == null)
			return null;
		SolicitudCotizacion s = new SolicitudCotizacion();
		s.setId(dto.getId());
		s.setFecha(dto.getFecha());
		s.setCliente(Cliente.fromDTO(dto.getCliente()));
		for (ItemSolicitudCotizacionTO i : dto.getItems())
			s.agregarItem(ItemSolicitudCotizacion.fromDTO(i));
		return s;
	}
}